From: kaf24@scramble.cl.cam.ac.uk Date: Thu, 24 Jun 2004 17:22:03 +0000 (+0000) Subject: bitkeeper revision 1.1011.1.5 (40db0dbbPeQLwub6SrW6h5ORlAC4SA) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~18095^2~2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=90c3aeddfc61ec297ffe2db3750cdf9cb9764a06;p=xen.git bitkeeper revision 1.1011.1.5 (40db0dbbPeQLwub6SrW6h5ORlAC4SA) Add trace support to new xend. --- diff --git a/tools/xenmgr/lib/server/SrvConsoleServer.py b/tools/xenmgr/lib/server/SrvConsoleServer.py index 94b7c8e6c8..7a8e4b96d8 100644 --- a/tools/xenmgr/lib/server/SrvConsoleServer.py +++ b/tools/xenmgr/lib/server/SrvConsoleServer.py @@ -8,6 +8,8 @@ import os import os.path import signal import sys +import threading +import linecache import socket import pwd import re @@ -482,7 +484,7 @@ class Daemon: while code > 0: code = os.waitpid(-1, os.WNOHANG) - def start(self): + def start(self,trace=0): if self.cleanup(kill=False): return 1 @@ -506,9 +508,54 @@ class Daemon: # Child logfile = self.open_logfile() self.redirect_output(logfile) + if trace: + self.tracefile = open('/var/log/xend.trace', 'w+', 1) + self.traceindent = 0 + sys.settrace(self.trace) + try: + threading.settrace(self.trace) # Only in Python >= 2.3 + except: + pass self.run() return 0 + def print_trace(self,str): + for i in range(self.traceindent): + self.tracefile.write(" ") + self.tracefile.write(str) + + def trace(self, frame, event, arg): + if event == 'call': + code = frame.f_code + filename = code.co_filename + m = re.search('.*xenmgr/(.*)', code.co_filename) + if not m: + return None + modulename = m.group(1) + if re.search('sxp.py', modulename): + return None + self.traceindent += 1 + self.print_trace("++++ %s:%s\n" + % (modulename, code.co_name)) + elif event == 'line': + filename = frame.f_code.co_filename + lineno = frame.f_lineno + self.print_trace("%4d %s" % + (lineno, linecache.getline(filename, lineno))) + elif event == 'return': + code = frame.f_code + filename = code.co_filename + m = re.search('.*xenmgr/(.*)', code.co_filename) + if not m: + return None + modulename = m.group(1) + self.print_trace("---- %s:%s\n" + % (modulename, code.co_name)) + self.traceindent -= 1 + elif event == 'exception': + pass + return self.trace + def open_logfile(self): if not os.path.exists(CONTROL_DIR): os.makedirs(CONTROL_DIR) diff --git a/tools/xenmgr/xend b/tools/xenmgr/xend index e575eeccd5..72b6d307f6 100644 --- a/tools/xenmgr/xend +++ b/tools/xenmgr/xend @@ -29,6 +29,8 @@ def main(): return status >> 8 elif sys.argv[1] == 'start': return daemon.start() + elif sys.argv[1] == 'trace_start': + return daemon.start(trace=1) elif sys.argv[1] == 'stop': return daemon.stop() elif sys.argv[1] == 'restart':